home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1985-06-04 | 5.6 KB | 191 lines |
- 100 REM CPASORT
- 102 CLOSE
- 110 DEFINT B-Z:DEFSNG A
- 112 DIM X$(12),R6$(500)
- 114 FOR I=1 TO 12
- 116 READ X$(I)
- 118 NEXT I
- 120 DATA "JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"
- 122 DIM S(500),F(500),D$(500),D(500),O2(500),ES(500),EF(500),LS(500),LF(500)
- 124 DIM A(1500),P(500),A3(100),B(500),S$(48),M$(11),S2(500)
- 126 PRINT FRE(0)
- 128 B4=VAL(MID$(DATE$,1,2))
- 130 B5=VAL(MID$(DATE$,4,2))
- 132 B6=VAL(MID$(DATE$,9,2))
- 150 GOSUB 5000 'READ INPUT FILE
- 190 O5=11
- 200 FOR I=1 TO O5:READ M$(I):NEXT
- 210 DATA "NO SORT (RETURN TO MENU)","FROM NODES","TO NODES","ESTIMATED DURATIONS","ACTUAL DURATIONS","EARLY START DATES","LATE START DATES","EARLY FINISH DATES","LATE FINISH DATES","FLOAT","SUBCONTRACTOR CODES"
- 300 GOSUB 9000 'READ IN SORT FILE
- 400 PRINT :PRINT :PRINT TAB(23);"CHOICE OF SORTS":PRINT
- 410 FOR I=1 TO O5
- 420 PRINT TAB(10);M$(I);TAB(48);"-";:PRINT USING " ##";I-1
- 430 NEXT
- 440 PRINT :INPUT "Enter the number of your sort choice ";P
- 450 IF P=0 THEN CHAIN "CPAMENU"
- 460 IF P>O5 THEN BEEP:PRINT "**** INVALID CHOICE ****":GOTO 440
- 500 REM TRANSFER ARRAY TO BE SORTED
- 505 ON P GOTO 510,515,520,525,530,535,540,545,550,555
- 510 FOR K=1 TO N:S2(K)=S(K):NEXT:GOTO 600
- 515 FOR K=1 TO N:S2(K)=F(K):NEXT:GOTO 600
- 520 FOR K=1 TO N:S2(K)=O2(K):NEXT:GOTO 600
- 525 FOR K=1 TO N:S2(K)=D(K):NEXT:GOTO 600
- 530 FOR K=1 TO N:S2(K)=ES(K):NEXT:GOTO 600
- 535 FOR K=1 TO N:S2(K)=LS(K):NEXT:GOTO 600
- 540 FOR K=1 TO N:S2(K)=EF(K):NEXT:GOTO 600
- 545 FOR K=1 TO N:S2(K)=LF(K):NEXT:GOTO 600
- 550 FOR K=1 TO N:S2(K)=LF(K)-EF(K):NEXT:GOTO 600
- 555 FOR K=1 TO N:S2(K)=B(K):NEXT:GOTO 600
- 600 PRINT "**** SORTING"N"ACTIVITIES - TAKES";INT(N/3);"SECONDS IN REGULAR BASIC ****"
- 610 GOSUB 3140 'SHELL-METZNER SORT
- 690 PRINT "**** FINISHED SORT - FIGURING DAYS - TAKES";INT(C3/4);"SECONDS ****"
- 695 GOSUB 8000 'READ HOLIDAYS
- 700 GOSUB 7000 'FIGURE DAYS WITH MESSAGE
- 710 PRINT "**** DAYS FIGURED - READING SUBCONTRACTORS ****"
- 750 GOSUB 4800 'READ IN SUBCONTRACTORS
- 770 H$=F$+".SRT"
- 800 PRINT "Output File Name is ";H$;" O.K. (Y/N) ";
- 810 INPUT Q$
- 820 IF Q$="N" THEN INPUT "Enter new output file name [WITHOUT .SRT] ";H$
- 825 IF LEN(H$)>12 THEN PRINT "**** INVALID FILE NAME ****":BEEP:GOTO 820
- 830 OPEN H$ FOR OUTPUT AS #2
- 1250 IF LEN(P$)>60 THEN P1$=LEFT$(P$,60) ELSE P1$=P$
- 1260 T4=INT((118-52-LEN(P1$))/2)
- 1270 PRINT #2,TAB(T4);"CRITICAL PATH ANALYSIS FOR: ";P1$;" RUN DATE: ";X$(B4);B5;", 19";RIGHT$(STR$(B6),2)
- 1280 PRINT #2,G9$
- 1290 T4=((120-15-LEN(T6$))/2)
- 1300 PRINT #2,TAB(T4);"TIME PERIOD = ";T6$
- 1310 PRINT #2,G9$
- 1320 W4$=" DESCRIPTION "
- 1330 W$="ACTIVITY"+W4$+"FROM TO EST. ACTUAL EARLY LAST EARLY LAST FLOAT C REPORT SUBCONTRACTOR"
- 1340 W1$="NODE NODE TIME TIME START START FINISH FINISH TIME P FINISH NAME"
- 1350 PRINT #2,W$
- 1360 PRINT #2,TAB(42);W1$
- 1370 PRINT #2,G9$
- 1380 S4$="\ \"
- 1390 S5$=" \ \ \ \ "
- 1400 S$=S4$+" #### #### #### #### "+S5$+S5$+"#### ! \ \ \ \"
- 1410 S1$=S4$+" , #### , #### , #### , #### , #### , #### , #### , #### , #### , \ \ , ## "
- 1420 FOR J=1 TO N
- 1430 I=P(J)
- 1440 IF T7=1 THEN A7=LF(I)+1 ELSE A7=A(LF(I)+1)
- 1460 GOSUB 7550
- 1470 R4$=P6$
- 1480 IF T7=1 THEN A7=ES(I)+1 ELSE A7=A(ES(I)+1)
- 1500 GOSUB 7550
- 1510 R1$=P6$
- 1520 IF T7=1 THEN A7=LS(I)+1 ELSE A7=A(LS(I)+1)
- 1540 GOSUB 7550
- 1550 R2$=P6$
- 1560 IF T7=1 THEN A7=EF(I)+1 ELSE A7=A(EF(I)+1)
- 1580 GOSUB 7550
- 1590 R3$=P6$
- 1600 IF R6$(I)="0" THEN R6$(I)=" "
- 1660 IF LF(I)-EF(I)=0 THEN G1$="*" ELSE G1$=" "
- 1670 PRINT #2,USING S$;D$(I),S(I),F(I),O2(I),D(I),R1$,R2$,R3$,R4$,LF(I)-EF(I),G1$,R6$(I),S$(B(I))
- 1690 NEXT
- 1700 CLOSE #2
- 1710 PRINT:PRINT "**** OUTPUT FILED IN ";F$;".SRT ****"
- 1720 GOTO 400
- 3140 REM **** SHELL METZNER SORT ****************************************
- 3150 J=N
- 3160 FOR I=1 TO N:P(I)=J:J=J-1:NEXT I
- 3200 M=N
- 3210 M=INT(M/2)
- 3220 IF M=0 THEN RETURN
- 3230 J=1
- 3240 K=N-M
- 3250 I=J
- 3260 L=I+M
- 3270 IF S2(P(I))<S2(P(L)) THEN 3340
- 3280 SWAP P(I),P(L)
- 3310 I=I-M
- 3320 IF I<1 THEN 3340
- 3330 GOTO 3260
- 3340 J=J+1
- 3350 IF J>K THEN 3210
- 3360 GOTO 3250
- 4800 ON ERROR GOTO 4900
- 4805 OPEN F$+".SBC" FOR INPUT AS #1
- 4810 I=0
- 4820 I=I+1
- 4830 IF EOF(1) THEN 4860
- 4840 INPUT #1,S$(I)
- 4850 GOTO 4820
- 4860 PRINT "**** FILE ";F$;".SBC READ -";I-1;"SUBCONTRACTORS READ ****"
- 4865 NSBC=I-1
- 4867 CLOSE #1
- 4870 RETURN
- 4900 PRINT "**** NO SUBCONTRACTOR FILE - CONTINUING ****":NSBC=0:RESUME 4870
- 5000 REM **** READING IN ALREADY CREATED INPUT FILE ******************
- 5010 INPUT "Enter the name of the input file [.CPM] ";G$
- 5015 IF G$="Q" OR G$="QUIT" THEN 3500
- 5020 P=INSTR(1,G$,"."):IF P<>0 THEN F$=LEFT$(G$,INSTR(1,G$,".")-1) ELSE F$=G$
- 5030 IF LEN(F$)>8 THEN PRINT "**** NOT A VALID PCPM FILE ****":BEEP:GOTO 5010
- 5035 ON ERROR GOTO 5300
- 5037 G$=F$+".CPM"
- 5040 OPEN G$ FOR INPUT AS #3
- 5050 INPUT #3,P$,T6$,DA$
- 5060 IF LEFT$(T6$,3)="WOR" OR LEFT$(T6$,3)="CAL" THEN T7=0 ELSE T7=1
- 5150 CLOSE #3
- 5160 PRINT " **** INPUT FILE READ ****"
- 5170 RETURN
- 5300 PRINT "**** FILE DOES NOT EXIST - TRY AGAIN ****":BEEP:GOTO 5000
- 7000 REM ** CREATE ARRAY OF MMDDYYS ******************************
- 7010 REM IF A(1)=0 THEN A(1)=M6*10000+D6*100+Y6
- 7020 D1=D1+1
- 7030 IF D1>C3+1 THEN RETURN
- 7040 A8=A8+1
- 7050 GOSUB 7130
- 7060 IF LEFT$(T6$,3)="CAL" THEN 7070 ELSE IF D4=6 OR D4=7 THEN 7040
- 7070 O8=0
- 7080 GOSUB 7240
- 7090 IF O8=1 THEN 7040
- 7100 A(D1)=M5*10000+D5*100+Y5
- 7110 GOTO 7020
- 7120 REM ** CONVERT CENTURY DAY TO MM, DD, YY **************************
- 7130 T9=INT(A8/1461)
- 7140 Y5=INT((A8-T9+364)/365)
- 7150 Y4=A8-INT((Y5-1)*1461/4)
- 7160 L8=2
- 7170 IF Y5/4=INT(Y5/4) THEN L8=1
- 7180 T9=Y4
- 7190 IF T9>61-L8 THEN T9=T9+L8
- 7200 M5=INT((T9*9+269)/275)
- 7210 D5=T9-INT(M5*275/9)+30
- 7220 D4=A8-INT(A8/7)*7+1
- 7230 RETURN
- 7240 FOR J=1 TO H9 '**** HOLIDAY OR NOT ***********************************
- 7250 IF A8=A3(J) THEN O8=1
- 7260 NEXT J
- 7270 RETURN
- 7550 P6$=STR$(A7)
- 7560 IF T7=1 THEN 7600
- 7570 IF LEN(P6$)=6 THEN P6$=" "+P6$
- 7580 U9=VAL(LEFT$(P6$,3))
- 7590 P6$=X$(U9)+RIGHT$(P6$,4)
- 7600 RETURN
- 8000 ON ERROR GOTO 8200
- 8010 OPEN F$+".HOL" FOR INPUT AS #1
- 8020 J=0
- 8030 J=J+1
- 8040 IF EOF(1) THEN 8100
- 8050 INPUT #1,A3(J)
- 8060 GOTO 8030
- 8100 H9=J-1 'NUMBER OF HOLIDAYS
- 8110 CLOSE #1:RETURN
- 8200 PRINT "**** NO HOLIDAY FILE - CONTINUING ****":RESUME 8110
- 9000 REM READING IN SORT FILE
- 9010 ON ERROR GOTO 9200 'NO SORT FILE
- 9020 OPEN F$+".LGS" FOR INPUT AS #1
- 9030 INPUT #1,A8,A(1),C3
- 9040 I=0
- 9050 I=I+1
- 9060 IF EOF(1) THEN 9100
- 9070 INPUT #1,D$(I),S(I),F(I),O2(I),D(I),ES(I),LS(I),EF(I),LF(I),FL,R6$(I),B(I)
- 9075 IF I MOD 10=0 THEN PRINT I;
- 9080 GOTO 9050
- 9100 N=I-1
- 9110 CLOSE #1:RETURN
- 9200 PRINT "FILE ";F$;".LGS MUST BE CREATED BY OPTION 5 FIRST AND EXIST ON DISK****":BEEP:CHAIN "CPAMENU"
-